package rhplus.utilizador;


import java.sql.SQLException;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
import javax.jdo.PersistenceManager;
import rhplus.acessoBD.PMF;
import rhplus.persistencia.ContaDeUtilizador;
import rhplus.sistema.Mensagem;

public class ClienteParticular {

    public static String PARTICULAR = "particular";

public static void insere(Pessoa p, ContaDeUtilizador conta) {

        // insere na tabela Pessoa
        Pessoa.insere(p);
        Long idpessoa = Pessoa.devolveIdPessoaPorBI(p.getBI());

        //insere conta de utilizador
        conta.setIdPessoa(idpessoa);
        conta.setPerfil(PARTICULAR);
        ContaDeUtilizador.insere(conta);

        //insere na tabela utente
        Utente u = new Utente(idpessoa, PARTICULAR);
        Utente.insere(u);
        //  Long id_utente = Utente.devolveIdUtentePorIdPessoa(idpessoa);

        //insere na tabela cliente
        Cliente c = new Cliente(idpessoa);
        Cliente.insere(c);
    }

    public static Pessoa devolve(final String username) {

        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select from " + ContaDeUtilizador.class.getName()
                + " where username == '" + username + "'";

        Long id_pessoa = ((List<ContaDeUtilizador>) pm.newQuery(query).execute()).get(0).getIdPessoa();

        query = "select from " + Pessoa.class.getName()
                + " where id_pessoa == " + id_pessoa;

        List<Pessoa> cliente = (List<Pessoa>) pm.newQuery(query).execute();

        return cliente.get(0);
    }

    public static Pessoa devolve(Long id_cliente) {

        String query = "select from " + Pessoa.class.getName()
                + " where id_pessoa == " + id_cliente;

        PersistenceManager pm = PMF.get().getPersistenceManager();

        List<Pessoa> lista = (List<Pessoa>) pm.newQuery(query).execute();

        return lista.get(0);
    }

    public static LinkedList<String> verificaMensagens(final long id_pessoa) {

        LinkedList<String> lista_mensagens = new LinkedList<String>();

        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select from " + Mensagem.class.getName() + " where id_pessoa == " + id_pessoa;

        List<Mensagem> lista = (List<Mensagem>) pm.newQuery(query).execute();

        for (Mensagem m : lista) {
            lista_mensagens.add(m.getTexto());
        }

        return lista_mensagens;
    }

    public static LinkedList<String> verificaMensagensAgegados(final long id_titular) {

        LinkedList<String> lista_mensagens = new LinkedList<String>();

        PersistenceManager pm = PMF.get().getPersistenceManager();

        List<Pessoa> membros = MembroDoAgregado.devolveTodosDoCliente(id_titular);

        for (Pessoa membro : membros) {

            String query = "select from " + Mensagem.class.getName() + " where id_pessoa == " + membro.getIdPessoa();

            List<Mensagem> lista = (List<Mensagem>) pm.newQuery(query).execute();

            for (Mensagem mensagem : lista) {
                lista_mensagens.add(mensagem.getTexto());
            }
        }

        return lista_mensagens;
    }

    public static void adicionaMembroDoAgregado(MembroDoAgregado m) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    public void removeTratamentoPassado(Long id_tratamento_passado) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        TratamentoPassado.remove(id_tratamento_passado);
    }

    public void alteraTratamentoPassado(TratamentoPassado dados_do_tratamento_passado) throws Exception {
        TratamentoPassado.altera(dados_do_tratamento_passado);
    }

    public void adicionaTratamentoPassado(TratamentoPassado dados_do_tratamento_passado) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        TratamentoPassado.insere(dados_do_tratamento_passado);
    }

}
